package com.naodong.shenluntiku.mvp.presenter;

import com.naodong.shenluntiku.mvp.contract.CollectListContract;
import com.naodong.shenluntiku.mvp.model.bean.CollectDetail;
import com.naodong.shenluntiku.mvp.model.bean.PagingBean;
import com.naodong.shenluntiku.mvp.model.error.ApiError;
import com.naodong.shenluntiku.mvp.model.error.DefaultResponseErrorListener;
import com.naodong.shenluntiku.mvp.model.error.ResultHandleSubscriber;
import com.naodong.shenluntiku.util.RxUtils;

import java.util.List;

import javax.inject.Inject;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.shingohu.man.di.scope.ActivityScope;
import me.shingohu.man.mvp.BasePresenter;


/**
 * 通过Template生成对应页面的MVP和Dagger代码,请注意输入框中输入的名字必须相同
 * 由于每个项目包结构都不一定相同,所以每生成一个文件需要自己导入import包名,可以在设置中设置自动导入包名
 * 请在对应包下按以下顺序生成对应代码,Contract->Model->Presenter->Activity->Module->Component
 * 因为生成Activity时,Module和Component还没生成,但是Activity中有它们的引用,所以会报错,但是不用理会
 * 继续将Module和Component生成完后,编译一下项目再回到Activity,按提示修改一个方法名即可
 * 如果想生成Fragment的相关文件,则将上面构建顺序中的Activity换为Fragment,并将Component中inject方法的参数改为此Fragment
 */


/**
 * Created by hujie on 17/5/12.
 */

@ActivityScope
public class CollectListPresenter extends BasePresenter<CollectListContract.Model, CollectListContract.View> {

    @Inject
    public CollectListPresenter(CollectListContract.Model model, CollectListContract.View rootView) {
        super(model, rootView);
    }


    /**
     * 收藏列表
     */
    public void requestCollectList(boolean isRefresh, String url) {
        addDisposable(mModel.collectList(url)
                .subscribeOn(Schedulers.io())
                .doOnSubscribe(disposable -> {
                    if (isRefresh) {
                        getView().onRequesrStart();
                    }
                })
                .subscribeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .doAfterTerminate(() -> {
                    if (isRefresh) {
                        getView().onRequestFinish();
                    }
                })
                .compose(RxUtils.bindToLifecycle(getView()))
                .subscribeWith(new ResultHandleSubscriber<PagingBean<List<CollectDetail>>>(new DefaultResponseErrorListener() {
                    @Override
                    public void handleErrorCode204(ApiError apiError) {
                        if (isRefresh) {
                            getView().showEmptyView(apiError.getMessage());
                        }
                    }
                }) {
                    @Override
                    public void onNext(@NonNull PagingBean<List<CollectDetail>> listPagingBean) {
                        getView().setCollectList(isRefresh, listPagingBean);
                    }
                }));

    }


}